package javase2.day06.demo08;

/*
线程安全问题：
    卖票问题:会产生多个线程卖同一张票的bug:
            Thread-0正在卖第100张票
            Thread-2正在卖第100张票
            Thread-2正在卖第-1张票        这里还出现了不存在的票
     解决卖票的多线程问题方案二：同步方法   此方法可以是静态的不影响，但区别在于锁对象不同，前者是this后者是类.class文件
     使用步骤：
        1.将访问共享数据的代码抽取出来放到一个方法中
        2.在方法上添加synchronized修饰符

        格式：
            修饰符 synchronized 返回值类型 方法名(参数列表){
                可能会出现多线程问题的代码（访问共享数据的代码）
            }
 */
public class Demo01Ticket {
    public static void main(String[] args) {
        RunnableImpl runnable = new RunnableImpl();
        Thread thread1 = new Thread(runnable);
        Thread thread2 = new Thread(runnable);
        Thread thread3 = new Thread(runnable);
        thread1.start();
        thread2.start();
        thread3.start();
        /*  
Thread-0正在卖第100张票
Thread-0正在卖第99张票
Thread-0正在卖第98张票
Thread-0正在卖第97张票
Thread-0正在卖第96张票
Thread-0正在卖第95张票
Thread-0正在卖第94张票
......
Thread-2正在卖第5张票
Thread-2正在卖第4张票
Thread-2正在卖第3张票
Thread-2正在卖第2张票
Thread-2正在卖第1张票
         */
    }
}
